package article

import "context"

// Repository 文章仓储接口
type Repository interface {
	// Create 创建文章
	Create(ctx context.Context, article *Article) error

	// GetByID 通过ID获取文章
	GetByID(ctx context.Context, id uint) (*Article, error)

	// GetBySlug 通过Slug获取文章
	GetBySlug(ctx context.Context, slug string) (*Article, error)

	// Update 更新文章
	Update(ctx context.Context, article *Article) error

	// Delete 删除文章
	Delete(ctx context.Context, id uint) error

	// List 获取文章列表
	List(ctx context.Context, offset, limit int, filters map[string]interface{}) ([]*Article, int64, error)

	// ListByAuthor 获取作者的文章列表
	ListByAuthor(ctx context.Context, authorID uint, offset, limit int) ([]*Article, int64, error)

	// ListByCategory 获取分类下的文章列表
	ListByCategory(ctx context.Context, categoryID uint, offset, limit int) ([]*Article, int64, error)

	// ListRecommended 获取推荐文章列表
	ListRecommended(ctx context.Context, offset, limit int) ([]*Article, int64, error)

	// ExistsByTitle 检查标题是否存在
	ExistsByTitle(ctx context.Context, title string, excludeID uint) (bool, error)

	// ExistsBySlug 检查Slug是否存在
	ExistsBySlug(ctx context.Context, slug string, excludeID uint) (bool, error)

	// IncrementViews 增加浏览量
	IncrementViews(ctx context.Context, id uint) error

	// IncrementLikes 增加点赞数
	IncrementLikes(ctx context.Context, id uint) error

	// DecrementLikes 减少点赞数
	DecrementLikes(ctx context.Context, id uint) error

	// IncrementComments 增加评论数
	IncrementComments(ctx context.Context, id uint) error

	// DecrementComments 减少评论数
	DecrementComments(ctx context.Context, id uint) error
}
